timing_test(function() {
  at(0 * 1000, function() {
    assert_styles(".test", [
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'matrix(1, 0, 0, 1, 0, 0)'},
      {'transform':'matrix(0.7, 0.7, -0.7, 0.7, 10, 20)'},
      {'transform':'matrix3d(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1)'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'matrix(1, 0.5774, 0.364, 1, 0, 0)'},
      {'transform':'matrix(1, 0, 0.8391, 1, 0, 0)'},
      {'transform':'matrix(1, 0.5774, 0, 1, 0, 0)'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'matrix(1.5, 0, 0, 2, 0, 0)'},
      {'transform':'matrix(2, 0, 0, 1, 0, 0)'},
      {'transform':'matrix(1, 0, 0, 1.5, 0, 0)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 8, 1)'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'matrix(0.5, 0.866, -0.866, 0.5, 0, 0)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 0.342, 0.9397, 0, 0, -0.9397, 0.342, 0, 0, 0, 0, 1)'},
      {'transform':'matrix3d(0.1736, 0, -0.9848, 0, 0, 1, 0, 0, 0.9848, 0, 0.1736, 0, 0, 0, 0, 1)'},
      {'transform':'matrix(0.342, 0.9397, -0.9397, 0.342, 0, 0)'},
      {'transform':'matrix3d(0.6667, 0.6667, -0.3333, 0, -0.3333, 0.6667, 0.6667, 0, 0.6667, -0.3333, 0.6667, 0, 0, 0, 0, 1)'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'matrix(1, 0, 0, 1, 10, 20)'},
      {'transform':'matrix(1, 0, 0, 1, 10, 0)'},
      {'transform':'matrix(1, 0, 0, 1, 0, 20)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 30, 1)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10, 20, 40, 1)'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'none'},
      {'transform':'matrix(1, 0, 0, 1, 100, 0)'},
      {'transform':'matrix(0.9397, 0.342, -0.342, 0.9397, 100, 0)'},
      {'transform':'matrix(0.4184, 0.8972, -0.8972, 0.4184, 100, 0)'},
      {'transform':'matrix(0.4698, 0.171, -0.171, 0.4698, 100, 0)'},
    ]);
  });
  at(0.5 * 1000, function() {
    assert_styles(".test", [
      {'transform':'matrix(1, 0, 0, 1, 0, 0)'},
      {'transform':'matrix(0.9192, 0.3808, -0.3808, 0.9192, 5, 10)'},
      {'transform':'matrix3d(0.7071, 0, -0.7071, 0, 0, 1, 0, 0, 0.7071, 0, 0.7071, 0, 0, 0, 0, 1)'},
      {'transform':'matrix(0.9192, 0.3808, -0.3808, 0.9192, 5, 10)'},
      {'transform':'matrix3d(0.6059, 0.3756, -0.6941, 0, -0.3756, 0.9068, 0.1629, 0, 0.6976, 0.1637, 0.6976, 0, 5, 10, 0, 1)'},
      {'transform':'matrix3d(0.7071, 0, -0.7071, 0, 0, 1, 0, 0, 0.7071, 0, 0.7071, 0, 0, 0, 0, 1)'},
      {'transform':'matrix(1, 0.2679, 0.1763, 1, 0, 0)'},
      {'transform':'matrix(1, 0, 0.364, 1, 0, 0)'},
      {'transform':'matrix(1, 0.2679, 0, 1, 0, 0)'},
      {'transform':'matrix(1.041, 0.2788, 0.6079, 1.035, 0, 0)'},
      {'transform':'matrix(1.041, 0.2788, 0.3968, 1.072, 0, 0)'},
      {'transform':'matrix(1, 0.5774, 0.2062, 1.014, 0, 0)'},
      {'transform':'matrix(1.25, 0, 0, 1.5, 0, 0)'},
      {'transform':'matrix(1.5, 0, 0, 1, 0, 0)'},
      {'transform':'matrix(1, 0, 0, 1.25, 0, 0)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1.5, 0, 0, 0, 3, 1)'},
      {'transform':'matrix(1.75, 0, 0, 1.5, 0, 0)'},
      {'transform':'matrix(1.5, 0, 0, 1.25, 0, 0)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1.25, 0, 0, 0, 0, 1.5, 0, 0, 0, 4, 1)'},
      {'transform':'matrix3d(1.25, 0, 0, 0, 0, 1.5, 0, 0, 0, 0, 1.5, 0, 0, 0, 4, 1)'},
      {'transform':'matrix(0.866, 0.5, -0.5, 0.866, 0, 0)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 0.8192, 0.5736, 0, 0, -0.5736, 0.8192, 0, 0, 0, 0, 1)'},
      {'transform':'matrix3d(0.766, 0, -0.6428, 0, 0, 1, 0, 0, 0.6428, 0, 0.766, 0, 0, 0, 0, 1)'},
      {'transform':'matrix(0.8192, 0.5736, -0.5736, 0.8192, 0, 0)'},
      {'transform':'matrix3d(0.9107, 0.3333, -0.244, 0, -0.244, 0.9107, 0.3333, 0, 0.3333, -0.244, 0.9107, 0, 0, 0, 0, 1)'},
      {'transform':'matrix3d(0.8538, 0.4929, 0.1678, 0, -0.4929, 0.6613, 0.5654, 0, 0.1678, -0.5654, 0.8075, 0, 0, 0, 0, 1)'},
      {'transform':'matrix3d(0.7461, 0.2265, -0.6261, 0, 0.2265, 0.7979, 0.5587, 0, 0.6261, -0.5587, 0.544, 0, 0, 0, 0, 1)'},
      {'transform':'matrix3d(0.544, 0.5587, -0.6261, 0, -0.5587, 0.7979, 0.2265, 0, 0.6261, 0.2265, 0.7461, 0, 0, 0, 0, 1)'},
      {'transform':'matrix3d(0.559, 0.8194, -0.1267, 0, -0.7305, 0.559, 0.3922, 0, 0.3922, -0.1267, 0.9111, 0, 0, 0, 0, 1)'},
      {'transform':'matrix3d(0.6277, 0.7651, -0.1438, 0, -0.6771, 0.6277, 0.3841, 0, 0.3841, -0.1438, 0.912, 0, 0, 0, 0, 1)'},
      {'transform':'matrix(1, 0, 0, 1, 5, 10)'},
      {'transform':'matrix(1, 0, 0, 1, 5, 0)'},
      {'transform':'matrix(1, 0, 0, 1, 0, 10)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 15, 1)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5, 10, 20, 1)'},
      {'transform':'matrix(1, 0, 0, 1, 10, 10)'},
      {'transform':'matrix(1, 0, 0, 1, 5, 10)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 10, 15, 1)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5, 10, 35, 1)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10, 20, 20, 1)'},
      {'transform':'matrix(1, 0, 0, 1, 50, 0)'},
      {'transform':'matrix(0.9848, 0.1736, -0.1736, 0.9848, 50, 0)'},
      {'transform':'matrix(0.8392, 0.5346, -0.5346, 0.8392, 50, 0)'},
      {'transform':'matrix(0.7386, 0.1302, -0.1302, 0.7386, 50, 0)'},
      {'transform':'matrix(0.9848, 0.1736, -0.1736, 0.9848, 100, 0)'},
      {'transform':'matrix(0.7335, 0.6722, -0.6722, 0.7335, 100, 0)'},
      {'transform':'matrix(0.5493, 0.5033, -0.5033, 0.5493, 100, 0)'},
      {'transform':'matrix(0.7386, 0.1302, -0.1302, 0.7386, 100, 0)'},
    ]);
  });
  // This check is equivalent to checking at t=1000ms, it is placed all the way out here to allow manual viewing
  // to inspect multiple cycles of the animation at a time. The animation stops after all checks have completed.
  at(100001 * 1000, function() {
    assert_styles(".test", [
      {'transform':'matrix(1, 0, 0, 1, 0, 0)'},
      {'transform':'matrix(0.7, 0.7, -0.7, 0.7, 10, 20)'},
      {'transform':'matrix3d(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1)'},
      {'transform':'matrix(0.7, 0.7, -0.7, 0.7, 10, 20)'},
      {'transform':'matrix3d(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1)'},
      {'transform':'matrix(1, 0, 0, 1, 0, 0)'},
      {'transform':'matrix(1, 0.5774, 0.364, 1, 0, 0)'},
      {'transform':'matrix(1, 0, 0.8391, 1, 0, 0)'},
      {'transform':'matrix(1, 0.5774, 0, 1, 0, 0)'},
      {'transform':'matrix(1, 0, 0.8391, 1, 0, 0)'},
      {'transform':'matrix(1, 0.5774, 0, 1, 0, 0)'},
      {'transform':'matrix(1, 0.5774, 0.364, 1, 0, 0)'},
      {'transform':'matrix(1.5, 0, 0, 2, 0, 0)'},
      {'transform':'matrix(2, 0, 0, 1, 0, 0)'},
      {'transform':'matrix(1, 0, 0, 1.5, 0, 0)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 8, 1)'},
      {'transform':'matrix(2, 0, 0, 1, 0, 0)'},
      {'transform':'matrix(1, 0, 0, 1.5, 0, 0)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 8, 1)'},
      {'transform':'matrix(1.5, 0, 0, 2, 0, 0)'},
      {'transform':'matrix(0.5, 0.866, -0.866, 0.5, 0, 0)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 0.342, 0.9397, 0, 0, -0.9397, 0.342, 0, 0, 0, 0, 1)'},
      {'transform':'matrix3d(0.1736, 0, -0.9848, 0, 0, 1, 0, 0, 0.9848, 0, 0.1736, 0, 0, 0, 0, 1)'},
      {'transform':'matrix(0.342, 0.9397, -0.9397, 0.342, 0, 0)'},
      {'transform':'matrix3d(0.6667, 0.6667, -0.3333, 0, -0.3333, 0.6667, 0.6667, 0, 0.6667, -0.3333, 0.6667, 0, 0, 0, 0, 1)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 0.342, 0.9397, 0, 0, -0.9397, 0.342, 0, 0, 0, 0, 1)'},
      {'transform':'matrix3d(0.1736, 0, -0.9848, 0, 0, 1, 0, 0, 0.9848, 0, 0.1736, 0, 0, 0, 0, 1)'},
      {'transform':'matrix(0.342, 0.9397, -0.9397, 0.342, 0, 0)'},
      {'transform':'matrix3d(0.6667, 0.6667, -0.3333, 0, -0.3333, 0.6667, 0.6667, 0, 0.6667, -0.3333, 0.6667, 0, 0, 0, 0, 1)'},
      {'transform':'matrix(0.5, 0.866, -0.866, 0.5, 0, 0)'},
      {'transform':'matrix(1, 0, 0, 1, 10, 20)'},
      {'transform':'matrix(1, 0, 0, 1, 10, 0)'},
      {'transform':'matrix(1, 0, 0, 1, 0, 20)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 30, 1)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10, 20, 40, 1)'},
      {'transform':'matrix(1, 0, 0, 1, 10, 0)'},
      {'transform':'matrix(1, 0, 0, 1, 0, 20)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 30, 1)'},
      {'transform':'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10, 20, 40, 1)'},
      {'transform':'matrix(1, 0, 0, 1, 10, 20)'},
      {'transform':'matrix(1, 0, 0, 1, 100, 0)'},
      {'transform':'matrix(0.9397, 0.342, -0.342, 0.9397, 100, 0)'},
      {'transform':'matrix(0.4184, 0.8972, -0.8972, 0.4184, 100, 0)'},
      {'transform':'matrix(0.4698, 0.171, -0.171, 0.4698, 100, 0)'},
      {'transform':'matrix(0.9397, 0.342, -0.342, 0.9397, 100, 0)'},
      {'transform':'matrix(0.4184, 0.8972, -0.8972, 0.4184, 100, 0)'},
      {'transform':'matrix(0.4698, 0.171, -0.171, 0.4698, 100, 0)'},
      {'transform':'matrix(1, 0, 0, 1, 100, 0)'},
    ]);
  });
}, "Auto generated tests");
